#include "log.hpp"
#include "inetAddr.hpp"
#include <vector>

class Route
{
public:
    Route()
    {}

    void AddUser(InetAddr user)
    {
        _onlineUser.push_back(user);
    }

    bool DeleteUser(InetAddr user)
    {
        for(auto iter = _onlineUser.begin(); iter != _onlineUser.end(); iter++)
        {
            if(user == *iter)
            {
                _onlineUser.erase(iter);
                return true;
            }
        }
        return false;
    }

    bool Find(InetAddr &user)
    {
        for(auto& x : _onlineUser)
        {
            if(x == user)
            {
                return true;
            }
        }
        return false;
    }

    void MessageRoute(int sockfd, std::string message, InetAddr peer)
    {
        if(!Find(peer))
        {
            AddUser(peer);
        }
        std::string sdMessage = peer.AddrMessage() + "#" + message;
        for(auto& user : _onlineUser)
        {
            int n = sendto(sockfd, sdMessage.c_str(), sdMessage.size()
            , 0, (sockaddr*)&user.Sockaddr(), sizeof(user.Sockaddr()));
        }
        if(sdMessage.c_str() == "Quit")
        {
            DeleteUser(peer);
        }
    }
private:
    std::vector<InetAddr> _onlineUser;
};